package com.gitee.yusugar.core.util;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CodeGeneratorUtil {

    /**
     * 基本父类
     *
     * @param url         数据库连接
     * @param userName    用户名
     * @param password    密码
     * @param author      作者
     * @param basePackage 包路径
     * @param javaDir     生成的 java 路径
     * @param tablePrefix 过滤的前缀
     */
    public static void generator(String url, String userName, String password, String author, String basePackage, String javaDir, String... tablePrefix) {
        FastAutoGenerator.create(url, userName, password)
                .globalConfig((scanner, builder) ->
                        builder.author(StrUtil.isBlank(author) ? scanner.apply("请输入作者名称？") : author)
                                .enableSwagger()
                                .fileOverride()
                                .disableOpenDir()
                                .outputDir(System.getProperty("user.dir") + (StrUtil.isBlank(javaDir) ? "/src/main/java" : javaDir)))
                .packageConfig((scanner, builder) -> builder.parent(StrUtil.isBlank(basePackage) ? scanner.apply("请输入包名？") : basePackage))
                .strategyConfig((scanner, builder) ->
                        builder.addInclude(getTables(scanner.apply("请输入表名，多个英文逗号分隔。所有输入 all")))
                                .addTablePrefix(tablePrefix).controllerBuilder().enableRestStyle()
                                .entityBuilder().enableLombok().enableChainModel().enableRemoveIsPrefix()
                                .build())
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    /**
     * 省略自定参数
     *
     * @param url      数据库连接
     * @param userName 用户名
     * @param password 密码
     */
    public static void generatorCustomAll(String url, String userName, String password) {
        generator(url, userName, password, null, null, null);
    }

    /**
     * 自定javaDir
     *
     * @param url      数据库连接
     * @param userName 用户名
     * @param password 密码
     * @param javaDir  生成的 java 路径
     */
    public static void generatorCustomDir(String url, String userName, String password, String javaDir) {
        generator(url, userName, password, null, null, javaDir);
    }

    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}
